package control;

import java.io.IOException;
import java.util.List;

import javax.naming.Context;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import swimv2.ejb.entity.Lavoro;
import swimv2.ejb.remote.GestioneLavoroRemote;
import swimv2.ejb.remote.RicercaLavoroRemote;
import swimv2.ejb.util.LoginToken;
import util.HtmlUtil;

/**
 * Servlet implementation class CercaLavoro
 */
public class CercaLavoro extends Servlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see Servlet#Servlet()
     */
    public CercaLavoro() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		showCercaLavoro(request,response);
	}

	private void showCercaLavoro(HttpServletRequest request,HttpServletResponse response) {
		try {
			HtmlUtil.CompletaEdIncludi(request, response, "/WEB-INF/pages/cercaLavoro.jsp");
		} catch (ServletException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		String azione = (String) request.getParameter("azione");
		if(azione.equals("proponiCandidatura"))
		{
			proponiCandidatura(request,response);
			
		} else if(azione.equals("restringiLista"))
		{
			restringiLista(request,response);
			
		} else if(azione.equals("iniziaRicerca"))
		{
			iniziaRicerca(request,response);
			
		}
		
		
		
		
		
	}

	private void iniziaRicerca(HttpServletRequest request,HttpServletResponse response) {
		LoginToken tok = (LoginToken) request.getSession().getAttribute("LoginToken");
		String username=tok.getUsername();
		String testo = (String) request.getParameter("testo");
			try {
	        	Context jndiContext  = new javax.naming.InitialContext();
				Object ref1 = jndiContext.lookup("RicercaLavoro/remote");
				RicercaLavoroRemote ricercaLavoroRemote =(RicercaLavoroRemote) PortableRemoteObject.narrow(ref1, RicercaLavoroRemote.class);
				boolean traAmici  = (request.getParameter("traAmici") != null);
				ricercaLavoroRemote.iniziaRicerca(username,testo,traAmici);
				List<Lavoro> lavoriDisponibili = ricercaLavoroRemote.getLavoriTrovati();
				request.setAttribute("lavoriDisponibili", lavoriDisponibili);
				request.getSession().setAttribute("ricercaLavoroRemote",ricercaLavoroRemote);
				showCercaLavoro(request, response);
			} catch (NamingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		
	}

	private void restringiLista(HttpServletRequest request,
			HttpServletResponse response) {
		LoginToken tok = (LoginToken) request.getSession().getAttribute("LoginToken");
		String testo = (String) request.getParameter("testo");
		RicercaLavoroRemote ricercaLavoroRemote = (RicercaLavoroRemote) request.getSession().getAttribute("ricercaLavoroRemote");

			ricercaLavoroRemote.restringiLista(testo);
				
			List<Lavoro> lavoriDisponibili = ricercaLavoroRemote.getLavoriTrovati();
				request.setAttribute("lavoriDisponibili", lavoriDisponibili);
				showCercaLavoro(request, response);

	}

	private void proponiCandidatura(HttpServletRequest request,
			HttpServletResponse response) {
		Integer idLavoro = (Integer) Integer.parseInt(request.getParameter("id"));
		LoginToken tok = (LoginToken) request.getSession().getAttribute("LoginToken");
		String username=tok.getUsername();
		try {
        	Context jndiContext  = new javax.naming.InitialContext();
			Object ref1 = jndiContext.lookup("GestioneLavoro/remote");
			GestioneLavoroRemote gestioneLavoroRemote =(GestioneLavoroRemote) PortableRemoteObject.narrow(ref1, GestioneLavoroRemote.class);
			gestioneLavoroRemote.proponiCandidatura(username, idLavoro);

			
			//TODO, da sistemare. magari torna alla stessa pagina
			HtmlUtil.redirect(request, response, "/");
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ServletException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}			
		
	}



}
